package com.bdqn.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bdqn.base.mybatis.IMapper;
import com.bdqn.pojo.User;
import org.apache.ibatis.annotations.*;

/**
 * @description 针对表【sys_user】的数据库操作Mapper
 * @Entity com.bdqn.pojo.User
 */
public interface UserMapper extends IMapper<User> {

    /**
     * 根据用户名称和角色ID分页查询用户，关联查询用户对应的角色（延迟加载，使用的是MyBatis的一对一注解@One实现）
     *
     * 说明：
     * 注解@Results来映射查询结果集到实体类属性
     * 当我们需要通过查询到的一个字段值作为参数，去执行另外一个方法来查询关联的内容，而且两者是一对一关系时，可以使用@One注解来便捷的实现。selectById 方法是BaseMapper就提供的，所以我们不需要在RoleMapper中手动定义
     * 注解@Result(column="usr_role_id",property="usrRoleId")不写也不会报错，但是会导致我们查询结果（User实体）的usrRoleId属性没有值，但是第二个Result将usr_role_id的值作为查询条件传入子查询，所以role对象有值（延迟加载：使用时查询）
     *
     * @param usrName
     * @param roleId
     * @param page
     * @return
     */
    @Results({
            @Result(column = "usr_role_id", property = "usrRoleId"),
            @Result(column = "usr_role_id", property = "role",
                    one = @One(select = "com.bdqn.mapper.RoleMapper.selectById"))
    })
    @Select("select * from sys_user where usr_name like CONCAT('%',#{usrName},'%') and usr_role_id=#{roleId}")
    IPage<User> pageByUsrNameAndRoleId(@Param("usrName") String usrName, @Param("roleId") Long roleId, Page page);

    /**
     * 通过用户特征查找用户
     *
     * @param user
     * @return
     */
    User getUser(User user);

}




